import javafx.scene.control.Alert;
//selenium基础
//
//作业内容
//请你编写几个自动化用例，个数不限，内容包含但不限于：
//
//
//
//1、窗口的切换
//
//2、弹窗关闭和确认
//
//3、选择框的处理
//
//4、文件上传操作
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: WHY
 * Date: 2023-05-17
 * Time: 11:03
 */
public class Test {
    //表单操作
    from time import sleep
    from selenium import webdriver

    class TestDemo:
    def setup(self):
    self.driver=webdriver.Chrome()
            self.driver.maximize_window()
            self.driver.implicitly_wait(5)

    def teardown(self):
            self.driver.quit()

    def test_form(self):
            self.driver.get("https://www.baidu.com")

            #点击登录
        self.driver.find_element_by_id("s-top-loginbtn").click()

        #输入账号
        self.driver.find_element_by_id("TANGRAM__PSP_11__userName").send_keys("CSDN_demo")
        #输入密码
        self.driver.find_element_by_id("TANGRAM__PSP_11__password").send_keys("111111")
        #点击表单中的登录
        self.driver.find_element_by_id("TANGRAM__PSP_11__submit").click()

        #停止3秒为了看结果
    sleep(3)

        2.多窗口处理
    from time import sleep
    from selenium import webdriver
    from selenium.webdriver import ActionChains


    class TestDemo:
    def setup(self):
    self.driver=webdriver.Chrome()
            self.driver.maximize_window()
            self.driver.implicitly_wait(5)

    def teardown(self):
            self.driver.quit()

    def test_windows(self):
            self.driver.get("https://www.baidu.com/")
            #shiyong ActionChains进行操作
    action=ActionChains(self.driver)

        #点击百度首页右上角的登录
            element_login =self.driver.find_element_by_link_text("登录")
        action.click(element_login).perform() #点击百度“登录”

            #点击表单中的立即注册
        # 注意：当操作后有新窗口或者浮层出现的话，不能吧所有操作做完之后一起preform  这样会导致窗口无法正常弹出，影响下一个步骤的元素查找
            element_register = self.driver.find_element_by_link_text("立即注册")
        action.click(element_register).perform()
        #会有新窗口呈现 因此立即perform

        #获取当前所有窗口句柄
            windowsall=self.driver.window_handles #获取所有窗口句柄
        #打印获取句柄内容，主要是为了让大家看返回的窗口句柄是啥类型的，可以去掉
    print(windowsall)
        # 切换到注册窗口，即最后一个窗口句柄
        self.driver.switch_to.window(windowsall[-1])

            #输入注册名
            element_username = self.driver.find_element_by_id('TANGRAM__PSP_4__userName')
        element_username.send_keys("CSDN_demo")
                #暂停三秒，主要是为了观察当前页面是个啥情况，可以去掉
    sleep(3)

        #切换到登录窗口，即第一个窗口句柄
        self.driver.switch_to.window(windowsall[0])

            #下面开始进行正常的登录操作
        #输入用户名
            element_userloginname = self.driver.find_element_by_id('TANGRAM__PSP_11__userName')
        element_userloginname.send_keys("CSDN_demo")
                #输入密码
            element_userloginpassword = self.driver.find_element_by_id('TANGRAM__PSP_11__password')
        element_userloginpassword.send_keys("111111")
                #点击登录，提交表单
            element_loginbutton = self.driver.find_element_by_id('TANGRAM__PSP_11__submit')
        action.click(element_loginbutton).perform()
        # 暂停三秒，主要是为了观察当前页面是个啥情况，可以去掉
    sleep(3)

        3.多frame处理
    from time import sleep
    from selenium import webdriver
    from selenium.webdriver import ActionChains


    class TestDemo:
    def setup(self):
    self.driver=webdriver.Chrome()
            self.driver.maximize_window()
            self.driver.implicitly_wait(5)

    def teardown(self):
            self.driver.quit()

    def test_frame_drag(self):

            self.driver.get("https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable")
            #切换到iframe中
        self.driver.switch_to.frame('iframeResult')
                #定位元素
            el_draggable = self.driver.find_element_by_id('draggable')
    el_droppable = self.driver.find_element_by_id('droppable')

    action = ActionChains(self.driver)
        #使用ActionChains进行拖拽操作
        action.click_and_hold(el_draggable).move_to_element(el_droppable).perform()  # 不要忘记调用perform()
    sleep(3)
        #在将frame切换到默认的frame
        self.driver.switch_to.default_content()
                #点击确定
            el_submit = self.driver.find_element_by_id('submitBTN')
    print(el_submit.text)
4.多浏览器处理
    import os
    from time import sleep
    from selenium import webdriver

    class TestDemo:
    def setup(self):
    option = webdriver.ChromeOptions()
            option.add_experimental_option('w3c', False)

            #通过在终端给browser参数赋值，来判断使用使用浏览器运行测试用例
            browser=os.getenv("browser")
    print("browser",browser)
        #值为firefox则使用Firefox运行
        if browser=="firefox":
    self.driver=webdriver.Firefox()
            #值为headless，则使用PhantomJS运行
    elif browser =='headless':
    self.driver=webdriver.PhantomJS()
            #其他情况使用chrome，及默认的话也为chrome
        else:
    self.driver = webdriver.Chrome(options=option)
            self.driver.implicitly_wait(10)
            self.driver.maximize_window()

    def teardown(self):
            self.driver.quit()

    def test_form(self):
            self.driver.get("https://www.baidu.com")

            #点击登录
        self.driver.find_element_by_id("s-top-loginbtn").click()

        #输入账号
        self.driver.find_element_by_id("TANGRAM__PSP_11__userName").send_keys("CSDN_demo")
        #输入密码
        self.driver.find_element_by_id("TANGRAM__PSP_11__password").send_keys("111111")
        #点击表单中的登录
        self.driver.find_element_by_id("TANGRAM__PSP_11__submit").click()

        #停止3秒为了看窗口情况，可以删除
    sleep(3)
     5.文件上传
    from time import sleep
    from selenium import webdriver

    class TestDemo:
    def setup(self):
    self.driver=webdriver.Chrome()
            self.driver.maximize_window()
            self.driver.implicitly_wait(5)

    def teardown(self):
            self.driver.quit()
    def test_upload(self):
            self.driver.get("https://image.baidu.com/")
            #点击百度图片搜索框中的照相机图标
        self.driver.find_element_by_xpath('//*[@id="sttb"]/img[1]').click()
        #上传图片，使用相对路径
        self.driver.find_element_by_id('stfile').send_keys('../pic/test.jpg')
        #用于查看结果，可删除
    sleep(3)
       // 6.弹框处理
    from time import sleep
    from selenium import webdriver

    class TestDemo:
    def setup(self):
    self.driver=webdriver.Chrome()
            self.driver.maximize_window()
            self.driver.implicitly_wait(5)

    def teardown(self):
            self.driver.quit()

    def test_alert(self):
            #打开网址
        self.driver.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')

                #切换frame
        self.driver.switch_to.frame('iframeResult')

                #定位元素
            el_drag=self.driver.find_element_by_id('draggable')
    el_drop=self.driver.find_element_by_id('droppable')

            #定义actionchains动作
            action=ActionChains(self.driver)
        #进行拖拽操作
        action.drag_and_drop(el_drag,el_drop).perform()
    sleep(5)

        #切换到alert页面，并同意alert内容
        self.driver.switch_to.alert.accept()
                #alert的其他功能
        #self.driver.switch_to.alert.send_keys()  # - keysToSend: The text to be sent to Alert .
        #self.driver.switch_to.alert.dismiss()   #Dismisses the alert available.

            #切换至默认rframe
        self.driver.switch_to.default_content()
                self.driver.find_element_by_id('submitBTN').click()
    sleep(5)

//7.浏览器复用

}

